home *** CD-ROM | disk | FTP | other *** search
- #include "GraphicsModule_Types.h"
- #include "mytypes.h"
- #include "grafstuff.h"
- #include "sndstuff.h"
- #include "twilight.h"
-
- extern MonitorsInfoPtr gMonitorsInfoPtr;
-
- OSErr GetDimmer(FSSpec *dimSpec,DimmerModulePtr *returnDimmer)
- {
- short refNum;
- Handle theDimmer;
- DimmerModulePtr dimStore;
- OSErr err;
- SFTypeList typeList;
- short soundType;
-
- theDimmer = nil;
-
- refNum = HOpenResFile(dimSpec->vRefNum,dimSpec->parID,dimSpec->name,fsRdWrPerm);
- err = ResError();
- if (err==noErr && refNum==-1)
- err = -2;
- if (err!=noErr)
- return ResError();
-
- theDimmer = Get1IndResource(kDimmerResType,1);
-
- if (!HasEnoughMemory()) {
- CloseResFile(refNum);
- return kNotEnoughMemory;
- }
-
- soundType = GetSoundChannel();
-
- if (!theDimmer)
- return -3;
-
- DetachResource(theDimmer);
- MoveHHi(theDimmer);
- HLock(theDimmer);
-
- *returnDimmer = dimStore = (DimmerModulePtr) NewPtr(sizeof(DimmerModule));
- if (MemError()!=noErr)
- return MemError();
-
- CheckSupportedCalls(dimStore->callsSupported);
-
- if (SetupADGlobals(&dimStore->dimVars,soundType)!=noErr) {
- DisposPtr((Ptr)dimStore);
- return MemError();
- }
-
- dimStore->dimRgn = NewRgn();
- RectRgn(dimStore->dimRgn,&thePort->portRect);
-
- dimStore->resFile = refNum;
- dimStore->theDimmer = theDimmer;
- dimStore->dimStorage = 0;
- dimStore->dimZone = nil;
-
- return noErr;
- }
-
-
- OSErr FreeDimmer(DimmerModulePtr dimStore)
- {
- FreeADGlobals(dimStore->dimVars);
- DisposeRgn(dimStore->dimRgn);
- DisposHandle(dimStore->theDimmer);
- CloseResFile(dimStore->resFile);
- DisposPtr((Ptr)dimStore);
-
- return MemError();
- }
-
-
- OSErr InitDimmer(DimmerModulePtr dimStore)
- {
- ADDimmer dimmerProc;
- OSErr err;
- THz saveZone;
-
- if (!dimStore->callsSupported[hasInit])
- return noErr;
-
- saveZone = GetZone();
- if (dimStore->dimZone)
- SetZone(dimStore->dimZone);
-
- dimmerProc = (ADDimmer) *(dimStore->theDimmer);
- dimmerProc = (ADDimmer) StripAddress(dimmerProc);
- err = (dimmerProc)(&dimStore->dimStorage,dimStore->dimRgn,Initialize,dimStore->dimVars);
-
- dimStore->dimZone = GetZone();
- SetZone(saveZone);
- return err;
- }
-
-
- OSErr StartDimmer(DimmerModulePtr dimStore)
- {
- ADDimmer dimmerProc;
- OSErr err;
- THz saveZone;
-
- if (!dimStore->callsSupported[hasBlank])
- return noErr;
-
- saveZone = GetZone();
- SetZone(dimStore->dimZone);
-
- dimmerProc = (ADDimmer) *(dimStore->theDimmer);
- dimmerProc = (ADDimmer) StripAddress(dimmerProc);
- err = (dimmerProc)(&dimStore->dimStorage,dimStore->dimRgn,Blank,dimStore->dimVars);
-
- SetZone(saveZone);
- return err;
- }
-
-
- OSErr RunDimmer(DimmerModulePtr dimStore)
- {
- ADDimmer dimmerProc;
- OSErr err;
- THz saveZone;
-
- if (!dimStore->callsSupported[hasDrawFrame])
- return noErr;
-
- saveZone = GetZone();
- SetZone(dimStore->dimZone);
-
- dimmerProc = (ADDimmer) *(dimStore->theDimmer);
- dimmerProc = (ADDimmer) StripAddress(dimmerProc);
- err = (dimmerProc)(&dimStore->dimStorage,dimStore->dimRgn,DrawFrame,dimStore->dimVars);
-
- SetZone(saveZone);
- return err;
- }
-
- OSErr StopDimmer(DimmerModulePtr dimStore)
- {
- ADDimmer dimmerProc;
- OSErr err;
- THz saveZone;
-
- if (!dimStore->callsSupported[hasClose])
- return noErr;
-
- saveZone = GetZone();
- SetZone(dimStore->dimZone);
-
- dimmerProc = (ADDimmer) *(dimStore->theDimmer);
- dimmerProc = (ADDimmer) StripAddress(dimmerProc);
- err = (dimmerProc)(&dimStore->dimStorage,dimStore->dimRgn,Close,dimStore->dimVars);
-
- SetZone(saveZone);
- return err;
- }
-
-
- OSErr SelectModule(DimmerModulePtr dimStore)
- {
- ADDimmer dimmerProc;
- OSErr err;
- THz saveZone;
-
- if (!dimStore->callsSupported[hasModSelect])
- return noErr;
-
- saveZone = GetZone();
-
- dimmerProc = (ADDimmer) *(dimStore->theDimmer);
- dimmerProc = (ADDimmer) StripAddress(dimmerProc);
- err = (dimmerProc)(&dimStore->dimStorage,dimStore->dimRgn,ModuleSelected,dimStore->dimVars);
-
- dimStore->dimZone = GetZone();
- SetZone(saveZone);
- return err;
- }
-
-
- OSErr SetupADGlobals(GMParamBlockPtr *retBlock,short soundType)
- {
- SysEnvRec env;
- GDHandle theGD;
- OSErr err;
- GMParamBlockPtr gmBlock;
-
- err = SysEnvirons(curSysEnvVers,&env);
- if (err!=noErr)
- return err;
-
- *retBlock = gmBlock = (GMParamBlockPtr) NewPtr(sizeof(GMParamBlock));
- if (MemError()!=noErr)
- return MemError();
-
- gmBlock->errorMessage = (StringPtr) NewPtr(sizeof(Str255));
- if (MemError()!=noErr) {
- DisposPtr((Ptr)gmBlock);
- return MemError();
- }
-
- GetADControlValues(gmBlock->controlValues);
-
- err = InitModuleQD(&gmBlock->qdGlobalsCopy);
- if (err!=noErr) {
- DisposPtr((Ptr)gmBlock);
- DisposPtr((Ptr)gmBlock->errorMessage);
- return err;
- }
-
- err = MakeModuleSound(&gmBlock->sndChannel,soundType);
- if (err!=noErr) {
- DisposeModuleQD(gmBlock->qdGlobalsCopy);
- DisposPtr((Ptr)gmBlock);
- return err;
- }
-
- gmBlock->monitors = gMonitorsInfoPtr;
- gmBlock->colorQDAvail = (env.hasColorQD) ? true : 0;
- gmBlock->systemConfig = 0;
-
- SetupSysConfig(gmBlock,&env);
-
- SetRect(&gmBlock->demoRect,0,0,0,0);
- gmBlock->adVersion = 0x0200;
- gmBlock->brightness = 0;
-
- LoadADExtensions(&gmBlock->extPtr);
- }
-
-
- OSErr FreeADGlobals(GMParamBlockPtr gmBlock)
- {
- DisposeADExtensions(gmBlock->extPtr);
- DisposeModuleQD(gmBlock->qdGlobalsCopy);
- DisposeModuleSound(gmBlock->sndChannel);
- DisposPtr((Ptr)gmBlock->errorMessage);
- DisposPtr((Ptr)gmBlock);
- }
-
-
- Boolean HasEnoughMemory(void)
- {
- Handle syszHandle;
- long memReq;
-
- syszHandle = Get1Resource(kMemoryResType,0);
- if (!syszHandle)
- return true;
-
- BlockMove(*syszHandle,&memReq,sizeof(long));
- ReleaseResource(syszHandle);
-
- return (MaxBlock() > memReq);
- }
-
-
- short GetSoundChannel(void)
- {
- Handle resHandle;
- short soundType;
-
- resHandle = Get1Resource(kSoundChannelRes,0);
- if (resHandle) {
- BlockMove(*resHandle,&soundType,sizeof(short));
- ReleaseResource(resHandle);
- }
- else
- soundType = -1;
-
- return soundType;
- }
-
-
- void GetADControlValues(short ctlValue[])
- {
- short ctlIndex;
- Handle ctlHandle;
-
- for (ctlIndex=0; ctlIndex<kNumControls; ctlIndex++) {
-
- ctlHandle = Get1Resource(kSliderResType,ctlIndex+1000);
- if (!ctlHandle)
- ctlHandle = Get1Resource(kMenuResType,ctlIndex+1000);
- if (!ctlHandle)
- ctlHandle = Get1Resource(kCheckBoxResType,ctlIndex+1000);
- if (!ctlHandle)
- ctlHandle = Get1Resource(kTextResType,ctlIndex+1000);
-
- if (ResError()==noErr && ctlHandle) {
- BlockMove(*ctlHandle,&ctlValue[ctlIndex],sizeof(short));
- ReleaseResource(ctlHandle);
- }
- }
- }
-
-
- void CheckSupportedCalls(Boolean callsSupported[])
- {
- Handle calsHandle;
- short callIndex;
- unsigned char theCalls;
-
- callsSupported[hasInit] = true;
- callsSupported[hasBlank] = true;
- callsSupported[hasDrawFrame] = true;
- callsSupported[hasClose] = true;
- callsSupported[hasModSelect] = false;
- callsSupported[hasHelp] = false;
-
- calsHandle = Get1IndResource(kCallSupportedRes,1);
- if (!calsHandle)
- return;
-
- theCalls = **calsHandle;
-
- for (callIndex=0; callIndex<kNumMessages; callIndex++)
- callsSupported[callIndex] = ((theCalls & (1<<callIndex))!=0);
- }
-
-
- void SetupSysConfig(GMParamBlockPtr params,SysEnvRec *env)
- {
- params->systemConfig = 0;
-
- if (env->hasColorQD)
- params->systemConfig |= SoundAvailable;
-
- // params->systemConfig = 0x81ff;
- params->systemConfig = 0xc1ff;
- }
-
-
- void UpdateScreens(void)
- {
- WindowPtr newWindow;
- Rect bigRect;
- RgnHandle grayRgn;
-
- grayRgn = GetGrayRgn();
- bigRect = (**grayRgn).rgnBBox;
-
- newWindow = NewWindow(nil,&bigRect,"\p",true,plainDBox,(WindowPtr)-1,false,0);
- DisposeWindow(newWindow);
- DrawMenuBar();
- }
-
-
- void LoadADExtensions(ADExtensionsPtr *adExt)
- {
- short numExt;
- short indExt;
- Handle extHndl;
- ADExtensionsPtr newAD;
- ADExtEntry extEntry;
-
- numExt = CountResources(kADExtensionsType);
-
- newAD = (ADExtensionsPtr) NewPtr(sizeof(short)+(numExt*sizeof(ADExtRec)));
- if (MemError()!=noErr) {
- *adExt=nil;
- return;
- }
-
- *adExt = newAD;
-
- newAD->numExtensions = numExt;
-
- for (indExt=0; indExt<numExt; indExt++) {
- extHndl = GetIndResource(kADExtensionsType,indExt+1); // from app rsrc fork
- if (ResError()==noErr && extHndl) {
- // DetachResource(extHndl); keep rsrcs in memory
- MoveHHi(extHndl);
- HLock(extHndl);
- extEntry = (ADExtEntry) *extHndl;
- (extEntry)(&newAD->extPtr[indExt].extSig,&newAD->extPtr[indExt].extProc);
- }
- }
- }
-
-
- void DisposeADExtensions(ADExtensionsPtr adExt)
- {
- short indExt;
- Handle codeHndl;
-
- /* for (indExt = 0; indExt < adExt->numExtensions; indExt++) {
- codeHndl = RecoverHandle(adExt->extPtr[indExt].extProc);
- if (codeHndl)
- DisposeHandle(codeHndl);
- }
- rsrcs are still in memory */
-
- DisposePtr((Ptr)adExt);
- }
-